package tas.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import tas.dao.DaoAusentismo;
import tas.sql.ConectaDb;

public class DaoAusentismoImpl implements DaoAusentismo {

    private final ConectaDb db;

    public DaoAusentismoImpl() {
        this.db = new ConectaDb();
    }

    @Override
    public List<Object[]> ausentismoSolicitudQry(Integer idtrabajador, String periodo) {
        List<Object[]> list = null;
        String sql = "SELECT "
                + "SOLAUS.IDSOLICITUDAUSENTISMO SOLICITUD,"
                + "SOLAUS.IDESTADOVIGENTE CODESTADO,"
                + "SOLAUS.IDTRABAJADOR,"
                + "TO_CHAR(SOLAUSDET.FECHAAUSENTISMO, 'DD/MM/YYYY' ) FECHAAUSENTISMO,"
                + "TO_CHAR(SOLAUSDET.HORAINICIO, 'HH:MI:SS' )  || '-' || TO_CHAR(SOLAUSDET.HORAFIN, 'HH:MI:SS' )  HORA,"
                + "CONAUS.DESCRIPCIONAUSENTISMOCONCEPTO CONCEPTOAUSENTISMO,"
                + "SOLAUSEST.DESCRIPCIONESTADOSOLAUS ESTADO "
                + "FROM BDTAS.SOLICITUDAUSENTISMO SOLAUS "
                + "LEFT JOIN BDTAS.SOLICITUDAUSENTISMODETALLE SOLAUSDET "
                + "ON ( SOLAUSDET.IDSOLICITUDAUSENTISMO=SOLAUS.IDSOLICITUDAUSENTISMO) "
                + "LEFT JOIN BDTAS.SOLICITUDAUSENTISMOESTADO SOLAUSEST "
                + "ON (SOLAUS.IDESTADOVIGENTE=SOLAUSEST.IDESTADOSOLAUS) "
                + "LEFT JOIN BDTAS.AUSENTISMOCONCEPTO CONAUS "
                + "ON (SOLAUS.IDAUSENTISMOCONCEPTO =CONAUS.IDAUSENTISMOCONCEPTO) "
                + "WHERE IDTRABAJADOR=? "
                + "AND TO_CHAR(SOLAUS.FECHAREGISTRO, 'YYYYMM')=? "
                + "ORDER BY 1,2";

        Connection cn = db.getBdtas();
        if (cn != null) {
            try {
                PreparedStatement ps = cn.prepareStatement(sql);
                ps.setInt(1, idtrabajador);
                ps.setString(2, periodo);

                ResultSet rs = ps.executeQuery();

                list = new LinkedList<Object[]>();
                while (rs.next()) {
                    Object[] f = new Object[7];

                    f[0] = rs.getObject(1); // SOLICITUD
                    f[1] = rs.getObject(2); // CODESTADO
                    f[2] = rs.getObject(3); // IDTRABAJADOR
                    f[3] = rs.getObject(4); // FECHAAUSENTISMO
                    f[4] = rs.getObject(5); // HORA
                    f[5] = rs.getObject(6); // CONCEPTOAUSENTISMO
                    f[6] = rs.getObject(7); // ESTADO

                    list.add(f);
                }

            } catch (SQLException e) {
            } finally {
                try {
                    cn.close();
                } catch (SQLException e) {
                }
            }
        }

        return list;
    }

    @Override
    public String tipoModalidad(Integer idausentismotipo, Integer idausentismomodalidad, Integer idunidad) {
        String result = null;
        String sql01 = "SELECT "
                + "DESCRIPCIONAUSENTISMOTIPO TIPO "
                + "FROM BDTAS.AUSENTISMOTIPO "
                + "WHERE idausentismotipo=?";

        String sql02 = "SELECT "
                + "DESCRIPCIONAUSENTISMOMODALIDAD MODALIDAD "
                + "FROM BDTAS.AUSENTISMOMODALIDAD "
                + "WHERE IDAUSENTISMOMODALIDAD=?";

        String sql03 = "SELECT DESCRIPCIONUNIDADAUSENTISMO UNIDAD "
                + " FROM BDTAS.AUSENTISMOUNIDAD "
                + " WHERE IDUNIDADAUSENTISMO=?";

        Connection cn = db.getBdtas();
        if (cn != null) {
            boolean ok = false;
            try {
                cn.setAutoCommit(false);

                // TIPO
                PreparedStatement ps = cn.prepareStatement(sql01);
                ps.setInt(1, idausentismotipo);

                ResultSet rs = ps.executeQuery();
                if (rs.next()) {
                    result = rs.getString(1);
                }
                rs.close();
                ps.close();

                // MODALIDAD
                ps = cn.prepareStatement(sql02);
                ps.setInt(1, idausentismomodalidad);

                rs = ps.executeQuery();
                if (rs.next()) {
                    result += "/" + rs.getString(1);
                }
                rs.close();
                ps.close();

                // UNIDAD
                ps = cn.prepareStatement(sql03);
                ps.setInt(1, idunidad);

                rs = ps.executeQuery();
                if (rs.next()) {
                    result = result += "/" + rs.getString(1);
                }
                rs.close();
                ps.close();

                ok = true;

            } catch (SQLException e) {
                result = e.getMessage();
            } finally {
                try {
                    if (ok) {
                        cn.commit();
                    } else {
                        cn.rollback();
                    }

                    cn.setAutoCommit(true);
                    cn.close();

                } catch (SQLException e) {
                    result = e.getMessage();
                }
            }
        }

        return result;
    }

    @Override
    public String ausentismoSolicitudIns(Integer idtrabajador, Integer idausentismo,
            String fecha, String hora_ini, String hora_fin, Integer idusuario, String observacion) {
        String result = null;
        String sql01 = "INSERT INTO BDTAS.SOLICITUDAUSENTISMO("
                + "IDTRABAJADOR,"
                + "IDAUSENTISMOCONCEPTO,"
                + "IDESTADOVIGENTE,"
                + "FECHAREGISTRO"
                + ") VALUES("
                + "?,"
                + "?,"
                + "1,"
                + "(SELECT SYSDATE FROM DUAL)"
                + ")";

        String sql02 = "INSERT INTO BDTAS.SOLICITUDAUSENTISMODETALLE("
                + "IDSOLICITUDAUSENTISMO,"
                + "IDCORRELATIVO,"
                + "FECHAAUSENTISMO,"
                + "HORAINICIO,"
                + "HORAFIN"
                + ") VALUES("
                + "?,"
                + "1,"
                + "TO_DATE(?, 'DDMMYYYY'), "
                + "TO_TIMESTAMP(?, 'HH24:MI'),"
                + "TO_TIMESTAMP(?, 'HH24:MI')"
                + ")";

        String sql03 = "INSERT INTO BDTAS.SOLICITUDAUSENTISMOXESTADO("
                + "IDSOLICITUDAUSENTISMO,"
                + "IDESTADOSOLAUS,"
                + "IDCORRELATIVO,"
                + "USUARIO,"
                + "FECHA,"
                + "OBSERVACION"
                + ") VALUES("
                + "?,"
                + "1,"
                + "1,"
                + "?,"
                + "(SELECT SYSDATE FROM DUAL),"
                + "?"
                + ")";

        Connection cn = db.getBdtas();
        if (cn != null) {
            boolean ok = false;
            try {
                cn.setAutoCommit(false);

                // INS SOLICITUDAUSENTISMO y Obtener IDSOLICITUDAUSENTISMO
                PreparedStatement ps = cn.prepareStatement(sql01, new String[]{"IDSOLICITUDAUSENTISMO"});
                ps.setInt(1, idtrabajador);
                ps.setInt(2, idausentismo);

                int ctos = ps.executeUpdate();
                Integer idsolicitudausentismo = 0;
                if (ctos > 0) {
                    ResultSet rs = ps.getGeneratedKeys();
                    rs.next();
                    idsolicitudausentismo = rs.getInt(1); // idsolicitudausentismo generado
                    rs.close();
                } else {
                    throw new SQLException("Error al  insertar Solicitud de Ausentismo");
                }
                ps.close();

                String[] f = fecha.split("/"); // f[0]==dd, f[1]==mm, f[2]==yyyy

                // INS SOLICITUDAUSENTISMODETALLE
                ps = cn.prepareStatement(sql02);
                ps.setInt(1, idsolicitudausentismo);
                String aux = f[0] + f[1] + f[2];
                ps.setString(2, aux);
                ps.setString(3, hora_ini);
                ps.setString(4, hora_fin);

                ctos = ps.executeUpdate();
                if (ctos == 0) {
                    throw new SQLException("Error al  insertar Solicitud de Ausentismo Detalle");
                }
                ps.close();

                // INS SOLICITUDAUSENTISMOXESTADO
                ps = cn.prepareStatement(sql03);
                ps.setInt(1, idsolicitudausentismo);
                ps.setInt(2, idusuario);
                ps.setString(3, observacion);

                ctos = ps.executeUpdate();
                if (ctos == 0) {
                    throw new SQLException("Error al  insertar Solicitud de Ausentismo Estado");
                }
                ps.close();

                ok = true;

            } catch (SQLException e) {
                result = e.getMessage();
            } finally {
                try {
                    if (ok) {
                        cn.commit();
                    } else {
                        cn.rollback();
                    }

                    cn.setAutoCommit(true);
                    cn.close();

                } catch (SQLException e) {
                    result = e.getMessage();
                }
            }
        }

        return result;
    }

    @Override
    public Object[] ausentismoSolicitudCon1(Integer idsolicitudausentismo) {
        Object[] fil = null;
        String sql = " SELECT VIS_TRA.APELLIDOPATERNO   ||  ' ' ||  VIS_TRA.APELLIDOMATERNO ||  ' ' ||  VIS_TRA.NOMBRE AS TRABAJADOR, "
                + " TO_CHAR(SOLAUSDET.FECHAAUSENTISMO, 'DD/MM/YYYY' ) FECHAAUSENTISMO, "
                + " TO_CHAR(SOLAUSDET.HORAINICIO, 'HH:MI:SS' )  HORAINICIO, "
                + " TO_CHAR(SOLAUSDET.HORAFIN, 'HH:MI:SS' )  "
                + " HORAFIN, CONAUS.DESCRIPCIONAUSENTISMOCONCEPTO CONCEPTOAUSENTISMO, "
                + " AUSTIP.DESCRIPCIONAUSENTISMOTIPO || '/' || AUSMOD.DESCRIPCIONAUSENTISMOMODALIDAD  || '/' || AUSUNI.DESCRIPCIONUNIDADAUSENTISMO TIPOMODALIDAD "
                + " FROM BDTAS.SOLICITUDAUSENTISMO SOLAUS LEFT JOIN BDTAS.SOLICITUDAUSENTISMODETALLE SOLAUSDET "
                + " ON ( SOLAUSDET.IDSOLICITUDAUSENTISMO=SOLAUS.IDSOLICITUDAUSENTISMO) "
                + " LEFT JOIN BDTAS.AUSENTISMOCONCEPTO CONAUS ON (SOLAUS.IDAUSENTISMOCONCEPTO =CONAUS.IDAUSENTISMOCONCEPTO) "
                + " LEFT JOIN BDTAS.TRABAJADOR TRA ON (TRA.IDTRABAJADOR=SOLAUS.IDTRABAJADOR) "
                + " LEFT JOIN ADMINPJ.V_PER_CTL_TRABAJADOR VIS_TRA ON (VIS_TRA.IDTRABAJADORCORE=TRA.IDTRABAJADORCORE) "
                + " LEFT JOIN BDTAS.AUSENTISMOTIPO AUSTIP ON (AUSTIP.IDAUSENTISMOTIPO=CONAUS.IDAUSENTISMOTIPO) "
                + "LEFT JOIN BDTAS.AUSENTISMOMODALIDAD AUSMOD ON (AUSMOD.IDAUSENTISMOMODALIDAD=CONAUS.IDAUSENTISMOMODALIDAD) "
                + "LEFT JOIN BDTAS.AUSENTISMOUNIDAD AUSUNI ON (AUSUNI.IDUNIDADAUSENTISMO=CONAUS.IDUNIDADAUSENTISMO) "
                + "WHERE SOLAUS.IDSOLICITUDAUSENTISMO=?";

        Connection cn = db.getBdtas();
        if (cn != null) {
            try {
                PreparedStatement ps = cn.prepareStatement(sql);
                ps.setInt(1, idsolicitudausentismo);

                ResultSet rs = ps.executeQuery();

                if (rs.next()) {
                    fil = new Object[6];

                    fil[0] = rs.getObject(1); // TRABAJADOR
                    fil[1] = rs.getObject(2); // FECHAAUSENTISMO
                    fil[2] = rs.getObject(3); // HORAINICIO
                    fil[3] = rs.getObject(4); // HORAFIN
                    fil[4] = rs.getObject(5); // CONCEPTOAUSENTISMO
                    fil[5] = rs.getObject(6); // TIPOMODALIDAD
                }

            } catch (SQLException e) {
            } finally {
                try {
                    cn.close();
                } catch (SQLException e) {
                }
            }
        }

        return fil;
    }

    @Override
    public List<Object[]> ausentismoSolicitudCon2(Integer idsolicitudausentismo) {
        List<Object[]> list = null;
        String sql = "SELECT "
                + "EST.DESCRIPCIONESTADOSOLAUS ESTADO,"
                + "USU.APELLIDOS  ||  ' ' ||  USU.NOMBRES USUARIO,"
                + "TO_CHAR(SOLAUSEST.FECHA, 'DD/MM/YYYY'),"
                + "NVL(SOLAUSEST.OBSERVACION, ' ' ) "
                + "FROM BDTAS.SOLICITUDAUSENTISMOXESTADO SOLAUSEST "
                + "LEFT JOIN BDTAS.SOLICITUDAUSENTISMOESTADO EST "
                + "ON (EST.IDESTADOSOLAUS=SOLAUSEST.IDESTADOSOLAUS) "
                + "LEFT JOIN BDTAS.USUARIOS USU "
                + "ON (USU.IDUSUARIO=SOLAUSEST.USUARIO) "
                + "WHERE SOLAUSEST.IDSOLICITUDAUSENTISMO=?";

        Connection cn = db.getBdtas();
        if (cn != null) {
            try {
                PreparedStatement ps = cn.prepareStatement(sql);
                ps.setInt(1, idsolicitudausentismo);

                ResultSet rs = ps.executeQuery();
                list = new LinkedList<Object[]>();

                while (rs.next()) {
                    Object[] fil = new Object[4];

                    fil[0] = rs.getString(1);
                    fil[1] = rs.getString(2);
                    fil[2] = rs.getString(3);
                    fil[3] = rs.getString(4);

                    list.add(fil);
                }

            } catch (SQLException e) {
            } finally {
                try {
                    cn.close();
                } catch (SQLException e) {
                }
            }
        }

        return list;
    }

    @Override
    public Object[] ausentismoSolicitudUpd1(Integer idsolicitudausentismo) {

        Object[] fil = null;
        String estadoNuevo = null;

        String sql = " SELECT VIS_TRA.APELLIDOPATERNO   ||  ' ' ||  VIS_TRA.APELLIDOMATERNO ||  ' ' ||  VIS_TRA.NOMBRE AS TRABAJADOR, "
                + " TO_CHAR(SOLAUSDET.FECHAAUSENTISMO, 'DD/MM/YYYY' ) FECHAAUSENTISMO,"
                + " TO_CHAR(SOLAUSDET.HORAINICIO, 'HH:MI:SS' ) "
                + " HORAINICIO,TO_CHAR(SOLAUSDET.HORAFIN, 'HH:MI:SS' )  HORAFIN,"
                + " SOLAUSEST.DESCRIPCIONESTADOSOLAUS ESTADOACTUAL, "
                + " ? "
                + " FROM BDTAS.SOLICITUDAUSENTISMO SOLAUS LEFT JOIN BDTAS.SOLICITUDAUSENTISMODETALLE SOLAUSDET "
                + " ON ( SOLAUSDET.IDSOLICITUDAUSENTISMO=SOLAUS.IDSOLICITUDAUSENTISMO) "
                + " LEFT JOIN BDTAS.SOLICITUDAUSENTISMOESTADO SOLAUSEST "
                + " ON (SOLAUS.IDESTADOVIGENTE=SOLAUSEST.IDESTADOSOLAUS) "
                + " LEFT JOIN BDTAS.TRABAJADOR TRA  ON (TRA.IDTRABAJADOR=SOLAUS.IDTRABAJADOR) "
                + " LEFT JOIN ADMINPJ.V_PER_CTL_TRABAJADOR VIS_TRA "
                + " ON (VIS_TRA.IDTRABAJADORCORE=TRA.IDTRABAJADORCORE)"
                + " WHERE SOLAUS.IDSOLICITUDAUSENTISMO=?";

        String sql01 = "SELECT DESCRIPCIONESTADOSOLAUS FROM BDTAS.SOLICITUDAUSENTISMOESTADO WHERE IDESTADOSOLAUS=4";

        Connection cn = db.getBdtas();
        if (cn != null) {
            try {
                //Conseguir Nuevo Estado
                PreparedStatement ps = cn.prepareStatement(sql01);

                ResultSet rs = ps.executeQuery();
                if (rs.next()) {
                    estadoNuevo = rs.getString(1);
                }
                rs.close();
                ps.close();

                //Select 
                ps = cn.prepareStatement(sql);
                ps.setString(1, estadoNuevo);
                ps.setInt(2, idsolicitudausentismo);

                rs = ps.executeQuery();

                if (rs.next()) {
                    fil = new Object[6];

                    fil[0] = rs.getObject(1); // TRABAJADOR
                    fil[1] = rs.getObject(2); // FECHAAUSENTISMO
                    fil[2] = rs.getObject(3); // HORAINICIO
                    fil[3] = rs.getObject(4); // HORAFIN
                    fil[4] = rs.getObject(5); // ESTADOACTUAL 
                    fil[5] = rs.getObject(6); // ESTADONUEVO

                }

            } catch (SQLException e) {
            } finally {
                try {
                    cn.close();

                } catch (SQLException e) {

                }
            }
        }

        return fil;
    }

    @Override
    public String ausentismoSolicitudUpd2(Integer idsolicitudausentismo, Integer usuario, String obs) {
        String result = null;
        String sql01 = "SELECT MAX(IDCORRELATIVO +1) IDCORRELATIVO FROM BDTAS.SOLICITUDAUSENTISMOXESTADO "
                + "WHERE IDSOLICITUDAUSENTISMO=?";

        String sql02 = "INSERT INTO BDTAS.SOLICITUDAUSENTISMOXESTADO("
                + "IDSOLICITUDAUSENTISMO,"
                + "IDESTADOSOLAUS,"
                + "IDCORRELATIVO,"
                + "USUARIO,"
                + "FECHA,"
                + "OBSERVACION"
                + ") VALUES("
                + "?,"
                + "4,"
                + "?,"
                + "?,"
                + "(SELECT SYSDATE FROM DUAL),"
                + "?"
                + ")";

        String sql03 = "UPDATE BDTAS.SOLICITUDAUSENTISMO "
                + "SET IDESTADOVIGENTE=4 "
                + "WHERE IDSOLICITUDAUSENTISMO=?";

        Connection cn = db.getBdtas();
        if (cn != null) {
            boolean ok = false;
            try {
                cn.setAutoCommit(false);

                //
                PreparedStatement ps = cn.prepareStatement(sql01);
                ps.setInt(1, idsolicitudausentismo);

                ResultSet rs = ps.executeQuery();
                Integer idcorrelativo = 0;
                if (rs.next()) {
                    idcorrelativo = rs.getInt(1);
                } else {
                    throw new SQLException("Error al obtener Correlativo");
                }
                ps.close();

                // 
                ps = cn.prepareStatement(sql02);
                ps.setInt(1, idsolicitudausentismo);
                ps.setInt(2, idcorrelativo);
                ps.setInt(3, usuario);
                ps.setString(4, obs);

                int ctos = ps.executeUpdate();
                if (ctos == 0) {
                    throw new SQLException("Error en Insert de SOLICITUDAUSENTISMOXESTADO");
                }
                ps.close();

                // 
                ps = cn.prepareStatement(sql03);
                ps.setInt(1, idsolicitudausentismo);

                ctos = ps.executeUpdate();
                if (ctos == 0) {
                    throw new SQLException("Error en Update de SOLICITUDAUSENTISMO");
                }
                ps.close();

                ok = true;

            } catch (SQLException e) {
                result = e.getMessage();
            } finally {
                try {
                    if (ok) {
                        cn.commit();
                    } else {
                        cn.rollback();
                    }

                    cn.setAutoCommit(true);
                    cn.close();

                } catch (SQLException e) {
                    result = e.getMessage();
                }
            }
        }

        return result;
    }

    @Override
    public List<Object[]> ausentismoAprobacionQry(Integer idtrabajador, String filtro) {

        List<Object[]> list = null;
        String filtroInterno = " WHERE ";
        String idAño = null;
        String idUniEje = null;
        String idCorte = null;
        String idDependencia = null;
        Integer contador = 1;
        String operador = " OR ";
        String operadorInterno = "";

        String sql01 = " SELECT IDAÑO, "
                + " IDUNIDADEJECUTORA, "
                + " IDCORTE, "
                + " IDDEPENDENCIA "
                + " FROM BDTAS.JEFE "
                + " WHERE IDTRABAJADOR=?";

       
        Connection cn = db.getBdtas();
        if (cn != null) {
            try {

                PreparedStatement ps = cn.prepareStatement(sql01);
                ps.setInt(1, idtrabajador);

                ResultSet rs = ps.executeQuery();

                while (rs.next()) {

                    idAño = rs.getString(1);
                    idUniEje = rs.getString(2);
                    idCorte = rs.getString(3);
                    idDependencia = rs.getString(4);

                    if (contador.equals(1)) {
                        operadorInterno = "";
                    } else {
                        operadorInterno = operador;
                    }

                    filtroInterno += operadorInterno + "( VIS_TRA.IDAÑO = '" + idAño
                            + "' AND VIS_TRA.IDUNIDADEJECUTORA='" + idUniEje
                            + "' AND VIS_TRA.IDCORTE = '" + idCorte
                            + "' AND VIS_TRA.IDDEPENDENCIA = '" + idDependencia
                            + "' ) ";
                    ++contador;

                }
                rs.close();
                ps.close();

                ///
                
                 String sql02 = "SELECT "
                + "SOLAUS.IDTRABAJADOR,"
                + "SOLAUS.IDESTADOVIGENTE CODESTADO,"
                + "VIS_TRA.APELLIDOPATERNO   ||  ' ' ||  VIS_TRA.APELLIDOMATERNO ||  ' ' ||  VIS_TRA.NOMBRE AS TRABAJADOR,"
                + "SOLAUS.IDSOLICITUDAUSENTISMO SOLICITUD,"
                + "TO_CHAR(SOLAUSDET.FECHAAUSENTISMO, 'DD/MM/YYYY' ) FECHAAUSENTISMO,"
                + "TO_CHAR(SOLAUSDET.HORAINICIO, 'HH:MI' )  || '-' || TO_CHAR(SOLAUSDET.HORAFIN, 'HH:MI' )  HORA,"
                + "CONAUS.DESCRIPCIONAUSENTISMOCONCEPTO CONCEPTOAUSENTISMO,"
                + "SOLAUSEST.DESCRIPCIONESTADOSOLAUS ESTADO "
                + "FROM BDTAS.SOLICITUDAUSENTISMO SOLAUS "
                + "LEFT JOIN BDTAS.SOLICITUDAUSENTISMODETALLE SOLAUSDET "
                + "ON ( SOLAUSDET.IDSOLICITUDAUSENTISMO=SOLAUS.IDSOLICITUDAUSENTISMO) "
                + "LEFT JOIN BDTAS.SOLICITUDAUSENTISMOESTADO SOLAUSEST "
                + "ON (SOLAUS.IDESTADOVIGENTE=SOLAUSEST.IDESTADOSOLAUS) "
                + "LEFT JOIN BDTAS.AUSENTISMOCONCEPTO CONAUS "
                + "ON (SOLAUS.IDAUSENTISMOCONCEPTO =CONAUS.IDAUSENTISMOCONCEPTO) "
                + "LEFT JOIN BDTAS.TRABAJADOR TRA "
                + "ON (TRA.IDTRABAJADOR=SOLAUS.IDTRABAJADOR) "
                + "LEFT JOIN ADMINPJ.V_PER_CTL_TRABAJADOR VIS_TRA "
                + "ON (TRA.IDTRABAJADORCORE=VIS_TRA.IDTRABAJADORCORE) "
                + filtroInterno
                + filtro
                + " ORDER BY 1,4";
                
                if (contador > 1) {
                    ps = cn.prepareStatement(sql02);
//                    ps.setString(1, filtroInterno);

                    rs = ps.executeQuery();
                    list = new LinkedList<Object[]>();
                    while (rs.next()) {
                        Object[] f = new Object[8];

                        f[0] = rs.getObject(1); // IDTRABAJADOR
                        f[1] = rs.getObject(2); // CODESTADO
                        f[2] = rs.getObject(3); // TRABAJADOR
                        f[3] = rs.getObject(4); // SOLICITUD
                        f[4] = rs.getObject(5); // FECHAAUSENTISMO
                        f[5] = rs.getObject(6); // HORA
                        f[6] = rs.getObject(7); // CONCEPTOAUSENTISMO
                        f[7] = rs.getObject(8); // ESTADO

                        list.add(f);
                    }
                }
                else
                     {
                        throw new SQLException("Consulta no puede ser atendido");
                    }
                
                ps.close();

//                ok = true;
//                
//                ///
//                ps = cn.prepareStatement(sql02);
//                ps.setString(1, filtroInterno);
//
//                rs = ps.executeQuery();
//
//                list = new LinkedList<Object[]>();
//                while (rs.next()) {
//                    Object[] f = new Object[8];
//
//                    f[0] = rs.getObject(1); // IDTRABAJADOR
//                    f[1] = rs.getObject(2); // CODESTADO
//                    f[2] = rs.getObject(3); // TRABAJADOR
//                    f[3] = rs.getObject(4); // SOLICITUD
//                    f[4] = rs.getObject(5); // FECHAAUSENTISMO
//                    f[5] = rs.getObject(6); // HORA
//                    f[6] = rs.getObject(7); // CONCEPTOAUSENTISMO
//                    f[7] = rs.getObject(8); // ESTADO
//
//                    list.add(f);
//                }
//                
//                //
            } catch (SQLException e) {
            } finally {
                try {
                    cn.close();
                } catch (SQLException e) {
                }
            }
        }

        return list;
    }

    @Override
    public String ausentismoAprobacionIns(List<Integer> idsolicitudausentismo,
            Integer idusuario, String obs, Integer idestado) {
        String result = null;
        String sql01 = "INSERT INTO BDTAS.SOLICITUDAUSENTISMOXESTADO("
                + "IDSOLICITUDAUSENTISMO,"
                + "IDESTADOSOLAUS,"
                + "IDCORRELATIVO,"
                + "USUARIO,"
                + "FECHA,"
                + "OBSERVACION"
                + ") VALUES("
                + "?,"
                + "?,"
                + "(SELECT MAX(IDCORRELATIVO +1) IDCORRELATIVO FROM BDTAS.SOLICITUDAUSENTISMOXESTADO "
                + "WHERE IDSOLICITUDAUSENTISMO=?),"
                + "?,"
                + "(SELECT SYSDATE FROM DUAL),"
                + "?"
                + ")";

        String sql02 = "UPDATE BDTAS.SOLICITUDAUSENTISMO "
                + "SET IDESTADOVIGENTE=? "
                + "WHERE IDSOLICITUDAUSENTISMO=?";

        Connection cn = db.getBdtas();
        if (cn != null) {
            boolean ok = false;
            try {
                cn.setAutoCommit(false);

                for (Integer idsol : idsolicitudausentismo) {
                    //
                    PreparedStatement ps = cn.prepareStatement(sql01);
                    ps.setInt(1, idsol);
                    ps.setInt(2, idestado);
                    ps.setInt(3, idsol);
                    ps.setInt(4, idusuario);
                    ps.setString(5, obs);

                    int ctos = ps.executeUpdate();
                    if (ctos == 0) {
                        throw new SQLException("Error en adicionar SOLICITUDAUSENTISMOXESTADO");
                    }
                    ps.close();

                    // 
                    ps = cn.prepareStatement(sql02);
                    ps.setInt(1, idestado);
                    ps.setInt(2, idsol);

                    ctos = ps.executeUpdate();
                    if (ctos == 0) {
                        throw new SQLException("Error en actualizar SOLICITUDAUSENTISMO");
                    }
                    ps.close();
                }

                ok = true;

            } catch (SQLException e) {
                result = e.getMessage();
            } finally {
                try {
                    if (ok) {
                        cn.commit();
                    } else {
                        cn.rollback();
                    }

                    cn.setAutoCommit(true);
                    cn.close();

                } catch (SQLException e) {
                    result = e.getMessage();
                }
            }
        }

        return result;
    }

    @Override
    public String ausentismoSolicitudUpd1apr(List<Integer> idsolicitudausentismo, Integer usuario, String obs) {
        String result = null;
        String sql01 = "INSERT INTO BDTAS.SOLICITUDAUSENTISMOXESTADO("
                + "IDSOLICITUDAUSENTISMO,"
                + "IDESTADOSOLAUS,"
                + "IDCORRELATIVO,"
                + "USUARIO,"
                + "FECHA,"
                + "OBSERVACION"
                + ") VALUES("
                + "?,"
                + "?,"
                + "(SELECT MAX(IDCORRELATIVO +1) IDCORRELATIVO FROM BDTAS.SOLICITUDAUSENTISMOXESTADO "
                + "WHERE IDSOLICITUDAUSENTISMO=?),"
                + "?,"
                + "(SELECT SYSDATE FROM DUAL),"
                + "?"
                + ")";

        String sql02 = "UPDATE BDTAS.SOLICITUDAUSENTISMO "
                + "SET IDESTADOVIGENTE=? "
                + "WHERE IDSOLICITUDAUSENTISMO=?";

        Connection cn = db.getBdtas();
        if (cn != null) {
            boolean ok = false;
            try {
                cn.setAutoCommit(false);

                for (Integer idsol : idsolicitudausentismo) {
                    //
                    PreparedStatement ps = cn.prepareStatement(sql01);
                    ps.setInt(1, idsol);
                    ps.setInt(2, 1);
                    ps.setInt(3, idsol);
                    ps.setInt(4, usuario);
                    ps.setString(5, obs);

                    int ctos = ps.executeUpdate();
                    if (ctos == 0) {
                        throw new SQLException("Error en adicionar SOLICITUDAUSENTISMOXESTADO");
                    }
                    ps.close();

                    // 
                    ps = cn.prepareStatement(sql02);
                    ps.setInt(1, 1);
                    ps.setInt(2, idsol);

                    ctos = ps.executeUpdate();
                    if (ctos == 0) {
                        throw new SQLException("Error en actualizar SOLICITUDAUSENTISMO");
                    }
                    ps.close();
                }

                ok = true;

            } catch (SQLException e) {
                result = e.getMessage();
            } finally {
                try {
                    if (ok) {
                        cn.commit();
                    } else {
                        cn.rollback();
                    }

                    cn.setAutoCommit(true);
                    cn.close();

                } catch (SQLException e) {
                    result = e.getMessage();
                }
            }
        }

        return result;
    }

    @Override
    public String ausentismoSolicitudUpd2apr(Integer idsolicitudausentismo, Integer usuario, String obs) {
        String result = null;
        String sql01 = "SELECT MAX(IDCORRELATIVO +1) IDCORRELATIVO FROM BDTAS.SOLICITUDAUSENTISMOXESTADO "
                + "WHERE IDSOLICITUDAUSENTISMO=?";

        String sql02 = "INSERT INTO BDTAS.SOLICITUDAUSENTISMOXESTADO("
                + "IDSOLICITUDAUSENTISMO,"
                + "IDESTADOSOLAUS,"
                + "IDCORRELATIVO,"
                + "USUARIO,"
                + "FECHA,"
                + "OBSERVACION"
                + ") VALUES("
                + "?,"
                + "1,"
                + "?,"
                + "?,"
                + "(SELECT SYSDATE FROM DUAL),"
                + "?"
                + ")";

        String sql03 = "UPDATE BDTAS.SOLICITUDAUSENTISMO "
                + "SET IDESTADOVIGENTE=1 "
                + "WHERE IDSOLICITUDAUSENTISMO=?";

        Connection cn = db.getBdtas();
        if (cn != null) {
            boolean ok = false;
            try {
                cn.setAutoCommit(false);

                //
                PreparedStatement ps = cn.prepareStatement(sql01);
                ps.setInt(1, idsolicitudausentismo);

                ResultSet rs = ps.executeQuery();
                Integer idcorrelativo = 0;
                if (rs.next()) {
                    idcorrelativo = rs.getInt(1);
                } else {
                    throw new SQLException("Error al obtener Correlativo");
                }
                ps.close();

                // 
                ps = cn.prepareStatement(sql02);
                ps.setInt(1, idsolicitudausentismo);
                ps.setInt(2, idcorrelativo);
                ps.setInt(3, usuario);
                ps.setString(4, obs);

                int ctos = ps.executeUpdate();
                if (ctos == 0) {
                    throw new SQLException("Error en Insert de SOLICITUDAUSENTISMOXESTADO");
                }
                ps.close();

                // 
                ps = cn.prepareStatement(sql03);
                ps.setInt(1, idsolicitudausentismo);

                ctos = ps.executeUpdate();
                if (ctos == 0) {
                    throw new SQLException("Error en Update de SOLICITUDAUSENTISMO");
                }
                ps.close();

                ok = true;

            } catch (SQLException e) {
                result = e.getMessage();
            } finally {
                try {
                    if (ok) {
                        cn.commit();
                    } else {
                        cn.rollback();
                    }

                    cn.setAutoCommit(true);
                    cn.close();

                } catch (SQLException e) {
                    result = e.getMessage();
                }
            }
        }

        return result;
    }

}
